package com.sdkj.dspservice.common.utils;

import com.sdkj.dspservice.modules.sys.entity.Menu;

import java.util.ArrayList;
import java.util.List;

public class TreeUtils {

    /**
     * 制作树形结构
     * @param list
     * @return
     */
    public static List<Menu> makeTree(List<Menu> list){
        List<Menu> treeList = new ArrayList<>();
        // 循环查出的list，找到根节点（最大的父节点）的子节点
        for(Menu t : list){
            // 我们这里最大的根节点ID是-1，所以首先找pid为-1的子，然后调用我们的递归算法
            if("0".equals(t.getParentId())){
                t.setChildren(addChildMenu(t,list));
                if(CollectionsUtils.isEmpty(t.getChildren())){
                    t.setLeaf(true);
                }
                treeList.add(t);
            }
        }
        return treeList;
    }

    private static List<Menu> addChildMenu(Menu parent, List<Menu> list){
        List<Menu> childList = new ArrayList<>();
        // 为每一个父节点增加子树（List形式，没有则为空的list）
        for (Menu child : list){
            //如果子节点的pid等于父节点的ID，则说明是父子关系
            if(child.getParentId().equals(parent.getId())){
                // 是父子关系，则将其放入子list字面
                childList.add(child);
                // 继续调用递归算法，将当前作为父节点，继续找他的子节点，反复执行。
                addChildMenu(child,list);
            }
        }
        // 当遍历完成，返回调用的父节点的所有子节点
        return childList;
    }

}
